모의해킹
호스트기반모의해킹_29_리버스 쉘 업그레이드
작성자 : Heehyeon Yoo|2025-12-08
# 모의해킹# Reverse Shell# TTY Upgrade# Python# Dumb Shell
1. 쉘 업그레이드 필요성
1.1 덤 쉘(Dumb Shell)
nc(Netcat)로 받은 기본적인 리버스 쉘은 기능이 매우 제한적이다.
- 제약 사항:
Tab자동 완성 불가.Ctrl+C누르면 쉘 자체가 종료됨(가장 치명적).vi,ssh,mysql등 인터랙티브(Interactive) 프로그램 실행 불가.- 화살표 키(명령어 히스토리) 사용 불가.
1.2 Full TTY Shell
SSH로 접속한 것과 동일한 수준의 완전한 터미널 환경을 구축하는 과정이다. 이를 통해 안정적인 작업 환경을 확보해야 한다.
2. 업그레이드 절차(Step-by-Step)
아래 과정은 반드시 순서대로 진행해야 한다.
Step 1: Python pty 모듈을 이용한 쉘 생성
타겟 시스템에 Python이 설치되어 있다면, pty 모듈을 이용해 가상 터미널을 생성한다.
python3 -c 'import pty; pty.spawn("/bin/bash")'
# 또는
python -c 'import pty; pty.spawn("/bin/bash")'
(이 시점에서 프롬프트가 bash-4.2$ 처럼 바뀐다.)
Step 2: 백그라운드 전환 및 로컬 터미널 설정
Ctrl + Z를 눌러 리버스 쉘을 백그라운드(Background)로 보낸다.- (공격자 로컬 터미널로 돌아옴)
- 로컬 터미널 설정을 변경하여 입력값을 그대로 리버스 쉘로 전달하게 한다.
stty raw -echo; fgstty raw -echo: 로컬 터미널의 라인 처리 및 에코를 끈다(모든 키 입력을 원격으로 전달).fg: 백그라운드에 있던 쉘을 다시 포그라운드로 가져온다.
Step 3: 쉘 초기화 및 환경변수 설정
fg로 돌아오면 화면이 깨지거나 입력이 안 보이는 것처럼 보일 수 있다.
reset입력 후 엔터.(터미널 초기화)- 환경 변수 설정:
export SHELL=bash export TERM=xterm-256color # 또는 xterm - (옵션) 창 크기 맞추기:
- 로컬에서
stty size로 크기 확인 후, 타겟에서stty rows [행] cols [열]설정.
- 로컬에서
3. 결과
이제 Ctrl+C를 눌러도 쉘이 죽지 않고 현재 실행 중인 프로세스만 종료되며, vi 편집기나 Tab 자동 완성을 자유롭게 사용할 수 있다.
실무나 CTF에서 리버스 쉘을 얻자마자 가장 먼저 수행해야 하는 습관이다.